import { setToken, getToken, removeToken } from '@/utils/auth'
import { getUserDetailById, getUserInfo, login } from '@/api/user'
import { resetRouter } from '@/router'
const state = {
  token: getToken(), // token需要持久化 token放到缓存
  userInfo: {}
}
const mutations = {
  // 接口请求回来设置token
  setToken(state, token) {
    state.token = token
    setToken(token)
  },
  //   退出登录时，删除token
  removeToken(state) {
    state.token = null
    removeToken()
  },
  setUserinfo(state, userInfo) {
    state.userInfo = userInfo
    // console.log(userInfo)
  }
}
const actions = {
  // 登录
  async login(ctx, data) { // data:{mobile,password}
    const res = await login(data)
    // res默认会封装一层data 响应拦截器处理 res=token
    ctx.commit('setToken', res)
  },
  // 获取头像和信息
  async getUserInfo(ctx) {
    const res = await getUserInfo()
    const detail = await getUserDetailById(res.userId)
    ctx.commit('setUserinfo', { ...res, ...detail })
    return res // 在守卫调用时 用await接收
  },
  // 退出并删除cooki，重置登录信息，重置路由规则，vuex数据
  logout(ctx) {
    ctx.commit('removeToken')
    ctx.commit('setUserinfo', {}) // 重置登录信息
    resetRouter()// 重置路由规则
    ctx.commit('permission/setRoutes', [], { root: true }) // 在user里调用permission的方法 重置vuex数据
  }

}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
